CI/CD如何支撑运维自动化
点击上方蓝字关注我们
读完需 5 分钟
速读需 2 分钟
运维思索
运维工作中的重复性工作有哪些?
新服务器上架,与CMDB、监控、堡垒机联动同步;
操作系统初始化,包括用户、内核、安装源、规范目录、安全基线等;
基础组件初始化,包括Java环境、Pyhon环境、Nginx等各种组件;
应用版本发布、回滚,此过程与监控联动;
应用管理操作,如启动、停止、重启等;
监控系统与应用相关监控项的创建、禁用、启用等;
……
上述这些重复性的工作会零碎的分散在我们日常的运维过程中,我们有什么办法能够通过自动化的方式来处理这些琐碎的事情呢?
我的解决方案就是借助Jenkins 通过CI/CD的方式来实现运维自动化。之所以选择Jenkins,不只是因为其能够通过各种插件实现各种工具的集成,更重要有以下几点:
BlueOcean
Jenkins官方从用户角度出发,可使复杂的pipeline可视化,快速直观地理解管道状态
扩展共享库
通过共享库可以实现多个项目之间共享流水线,有助于减少冗余并保持代码干净整洁
Pipeline
流水线既可以作为job独立执行,也可以作为一项任务被其他流水线调用
总结以上两点:
BlueOcean满足了我对可视化管理界面的需求,降低了运维开发前端管理界面的负担,让我们把精力更多的集中在我们擅长的领域;
扩展共享库更大程度上满足了我对运维岗位的理解:二线运维通过共享库管理提供运维的原子化模块;一线运维通过pipeline自由组合共享库中的原子模块,形成最终的解决方案;
随着原子化的模块不断增多,那么我们的自动化运维就可以覆盖更多的场景,后续通过故障自愈的方式接入,那么就可以给我们释放更多时间,届时真正的SRE将不再是梦!
确保长期关注研发工作:Google 将 SRE 团队的运维工作限制在 50% 以内,剩余的时间花在研发项目上。
《SRE: Google 运维解密》
运维自动化支撑
如图,我们通过pipline编排出以下运维场景:
服务器自动上架
基础组件定制化安装
Java应用自动上线
Java应用版本发布
这些场景运行构建时会调用蓝鲸、pipeline job及扩展共享库中多个原子化模块,它们支撑运维自动化不同层面的实现。除了蓝鲸平台外,其他都是基于Jenkins,其中扩展共享库为方便区分将各个原子模块针对其功能归纳为以下几个级别:
操作系统级
Java应用级
Apollo配置中心级
监控系统级
CMDB级
后续我们可根据实际情况自行添加pipeline job及相关原子模块提交至扩展共享库中。
场景自动化实现
1.服务器自动上架
服务器的自动上架更多的是借助于蓝鲸标准运维,但因为服务器自动上架也是运维工作中的常见场景,所有在此进行简单说明,具体实现请见《蓝鲸实现多环境vsphere虚拟机交付》、《运维思索:cmdb打通zabbix、jumpserver探索》。
2.操作系统初始化与基础组件安装
操作系统初始化与基础组件安装借助于Jenkins + Ansible Playbook实现,同时也可以作为一个job由其他场景进行集成调用。其具体功能实现请见《Jenkins+Ansible:助力基础设施建设》。
3.Java应用自动上线
Java应用自动上线一般在应用第一次上线时使用,目的是在明确的运维规范前提下,能够快速上线应用。此过程我们主要使用的是pipeline job 及扩展共享库中的原子模块:
CMDB级模块:根据应用名获取应用IP;
pipeline job:基础组件初始化;
apollo配置中心级模块:配置发布;
Java应用级模块:应用版本发布、健康检查及应用启停等;
监控系统级模块:监控项新增;
通过这一些列的搭配,我们实现了Java应用自动上线的运维场景。
4.Java应用版本发布
Java应用版本发布包含发布、回滚两部分,在此我们统一以发布为准。此过程主要使用的是扩展共享库中的原子模块:
CMDB级模块:根据应用名获取应用IP;
apollo配置中心级模块:配置发布;
监控系统级模块:屏蔽监控;
Java应用级模块:应用版本发布、健康检查及应用启停等;
监控系统级模块:恢复监控;
由于版本发布在各公司的具体流程有所不同,在此我们需要根据实际情况自行调整,将流程中缺失的环节可以做成原子模块增加到扩展共享库。
总结
CI/CD不仅能够在企业DevOps进程中发挥重要作用,其实在运维自动化过程中也能做到足够有效的支撑。因此如果我们只将其当作成一个打包工具就大错特错了,其带给我们思想上的转变则更加有意义。